/*
 *
 */
package com.gper.edu.scalaclass

/*
 * @Author: ellis.guan
 * @Description:
 * @Date: 2020/4/12 21:14
 * @Version: 1.0
 */
class Counter {
  /*
   1. private val current 会生成一个私有的方法current
   2. 使用private[this] 来严格控制字段的访问权限，只有同一个对象中可见
   3. private[scalaclass] val counter 表示这个私有属性只能在包名中含有scalaclass的类中访问
      因此在ClassDemo类中可以访问到counter属性
  */
  private val current: Int = 0
  private[this] val value: Int = 0
  private[scalaclass] val counter = 2

  def isLess(other: Counter): Boolean = {
    // 可以访问other.current，这是由于other也是Counter对象
    current < other.current
  }

  /*
   * 使用private[this]修改的字段，不能访问其他对象的该字段值,直接报错
  def isLessValue(other: Counter): Boolean = {
    value < other.value
  }
   */
}

/**
 * 如果想让主构造器变成私有构造器，则将private修改，则class className private(参数列表)
 * 主构造器，跟类名相同
 * 辅助构造器的名称为this
 *
 * @param current
 * @param counter
 */
class Counter2 private(current: Int, counter: Int) {

  private var value: Int = 0

  def this(current: Int, counter: Int, value: Int) {
    this(current, counter)
    this.value = value
  }
}

object ClassDemo {
  def main(args: Array[String]): Unit = {
    val counter = new Counter
    println(counter.isLess(new Counter))
    println(counter.counter)
    val counter2 = new Counter2(2, 4, 5)
    println(counter2)
  }
}